import type { Dayjs } from 'dayjs';

import type { PageParam, PageResult } from '@vben/request';

import { requestClient } from '#/api/request';

export namespace PerBusinessSalaryApi {
  /** 人员工资情况业务信息 */
  export interface BusinessSalary {
    id: number; // 主键ID
    busiId?: string; // 业务主表id
    employeeId?: number; // 人员ID，对应 per_person.id
    salaryId: number; // 人员工资情况ID，对应 per_salary.id
    salary: number; // 工资
    partTimeIncome: number; // 兼职收入
    bonus: number; // 奖金
    otherIncome: number; // 其他收入
    totalIncome: number; // 合计收入
    year: string; // 年度
    status: number; // 是否有效（1：有效，0：无效）
    changeType: string; // 变更类型（add：新增，update：修改，delete：删除）
    changeContent: string; // 变更内容(JSON格式，记录变更前后对比，只有修改的时候记录)
    auditStatus: number; // 审核状态（0 草稿 1 审核中 2 审核完成）
    finalAuditStatus: number; // 最终审核状态：0 待审核 1 审核通过 2 审核不通过
    auditTime: Dayjs | string; // 审核完成时间
    auditor: string; // 审核人
    auditComment: string; // 审核意见
    metadata: string; // 其他参数
  }
}

/** 查询人员工资情况业务分页 */
export function getBusinessSalaryPage(
  data: PageParam,
  desensitize: boolean,
  encrypt: boolean,
) {
  return requestClient.post<PageResult<PerBusinessSalaryApi.BusinessSalary>>(
    '/per/business-salary/page',
    data,
    { desensitize, encrypt },
  );
}

/** 查询人员工资情况业务详情 */
export function getBusinessSalary(id: number) {
  return requestClient.get<PerBusinessSalaryApi.BusinessSalary>(
    `/per/business-salary/get?id=${id}`,
  );
}

/** 新增人员工资情况业务 */
export function createBusinessSalary(
  data: PerBusinessSalaryApi.BusinessSalary,
) {
  return requestClient.post('/per/business-salary/create', data);
}

/** 修改人员工资情况业务 */
export function updateBusinessSalary(
  data: PerBusinessSalaryApi.BusinessSalary,
) {
  return requestClient.put('/per/business-salary/update', data);
}

/** 删除人员工资情况业务 */
export function deleteBusinessSalary(id: number) {
  return requestClient.delete(`/per/business-salary/delete?id=${id}`);
}

/** 批量删除人员工资情况业务 */
export function deleteBusinessSalaryList(ids: number[]) {
  return requestClient.delete(
    `/per/business-salary/delete-list?ids=${ids.join(',')}`,
  );
}

/** 导出人员工资情况业务 */
export function exportBusinessSalary(params: any) {
  return requestClient.download('/per/business-salary/export-excel', {
    params,
  });
}

/** 根据业务主表id去查询业务数据 */
export function getBusinessSalaryByBusiId(data: any) {
  return requestClient.post<PerBusinessSalaryApi.BusinessSalary>(
    `/per/business-salary/getBusinessSalaryByBusiId`,
    data,
  );
}

/** 查询当前用户人员工资情况 */
export function getCurrentSalary(
  data,
  desensitize: boolean,
  encrypt?: boolean,
) {
  return requestClient.post<List<PerBusinessSalaryApi.BusinessSalary>>(
    '/per/business-salary/getCurrentSalary',
    data,
    {
      desensitize,
      encrypt,
    },
  );
}
